<html>
<head>
  <title>Python 变量类型</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="Evernote Windows/307027 (zh-CN, DDL); Windows/6.1.0 (Win32);"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="638"/>
<h1>Python 变量类型</h1>

<div>
<span><div><div><span style="font-size: 18pt; color: rgb(28, 51, 135);">变量</span></div><div>在Python程序中，变量是用一个变量名表示，变量名必须是<span style="color: rgb(255, 0, 0);">大小写英文、数字和下划线（_）的组合，且不能用数字开头</span>，比如：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">a = 1</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">变量a是一个整数。</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">t_007 = 'T007'</span></div></div><div>变量t_007是一个字符串。</div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div>在Python中，等号=是赋值语句，可以把任意数据类型赋值给变量，同一个变量可以反复赋值，而且可以是不同类型的变量，例如：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">a = 123    # a是整数</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">print a</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">a = 'imooc'   # a变为字符串</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">print a</span></div></div><div>这种变量本身类型不固定的语言称之为动态语言，与之对应的是静态语言。</div><div>静态语言在定义变量时必须指定变量类型，如果赋值的时候类型不匹配，就会报错。例如Java是静态语言，</div><div><br/></div><div><br/></div><div style="text-align: center;"><font style="font-size: 24pt;"><span style="font-size: 24pt; color: rgb(28, 51, 135); font-weight: bold;">字符串变量</span></font></div><div>字符串可以用''或者&quot;&quot;括起来表示。</div><div>如果字符串本身包含'怎么办？比如我们要表示字符串 I'm OK ，这时，可以用<span style="color: rgb(255, 0, 0);">&quot; &quot;</span>括起来表示：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&quot;I'm OK&quot;</span></div></div><div>类似的，如果字符串包含&quot;，我们就可以用<span style="color: rgb(255, 0, 0);">' '</span>括起来表示：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Learn &quot;Python&quot; in imooc'</span></div></div><div>如果字符串既包含'又包含&quot;怎么办？</div><div style="margin-top: 1em; margin-bottom: 1em;">这个时候，就需要对字符串的某些特殊字符进行“<span style="color: rgb(255, 0, 0);">转义</span>”，Python字符串用<span style="color: rgb(255, 0, 0);">\</span>进行转义。</div><div>要表示字符串 Bob said &quot;I'm OK&quot;.</div><div style="margin-top: 1em; margin-bottom: 1em;">由于 ' 和 &quot; 会引起歧义，因此，我们在它前面插入一个<span style="color: rgb(255, 0, 0);">\</span>表示这是一个普通字符，不代表字符串的起始，因此，这个字符串又可以表示为</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(255, 0, 0); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Bob said \&quot;I\'m OK\&quot;.'</span></div></div><div><br/></div><div>常用的<span style="font-size: 18pt; color: rgb(28, 51, 135);">转义字符</span>还有：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">\n 表示换行</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">\t 表示一个制表符</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">\\ 表示 \ 字符本身</span></div></div><div><br/></div><div><br/></div><div><ul><li><span style="font-size: 16pt; color: rgb(28, 51, 135);">raw 字符串</span></li></ul><div>在字符串前面加个前缀 <span style="color: rgb(255, 0, 0);">r</span> ，表示这是一个 raw 字符串，里面的字符就不需要转义了。</div></div><div>例如：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">r'\(~_~)/ \(~_~)/'</span></div></div><div>但是<span style="color: rgb(255, 0, 0);">r'...'</span>表示法不能表示多行字符串，也不能表示包含<span style="color: rgb(255, 0, 0);">'</span>和 <span style="color: rgb(255, 0, 0);">&quot;</span>的字符串</div><div><br/></div><div><ul><li><span style="font-size: 16pt; color: rgb(28, 51, 135);">多行字符串</span></li></ul></div><div><br/></div><div>可以用<span style="color: rgb(255, 0, 0);">'''...'''</span>表示：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'''Line 1</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Line 2</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Line 3'''</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">上面这个字符串的表示方法和下面的是完全一样的：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Line 1\nLine 2\nLine 3</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">还可以在多行字符串前面添加 <span style="color: rgb(255, 0, 0);">r</span> ，把这个多行字符串也变成一个<span style="color: rgb(255, 0, 0);">raw字符串</span>：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">r'''Python is created by &quot;Guido&quot;.</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">It is free and easy to learn.</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Let's start learn Python in imooc!'''</span></div></div><div><br/></div><div><br/></div><div><br/></div><h2><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">Unicode字符串</span></h2><div>        因为计算机只能处理数字，如果要处理文本，就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特（bit）作为一个字节（byte），所以，一个字节能表示的最大的整数就是255（二进制11111111=十进制255），0 - 255被用来表示大小写英文字母、数字和一些符号，这个编码表被称为<span style="color: rgb(255, 0, 0);">ASCII编码</span>，比如大写字母 <span style="color: rgb(255, 0, 0);">A </span>的编码是<span style="color: rgb(255, 0, 0);">65</span>，小写字母 <span style="color: rgb(255, 0, 0);">z </span>的编码是<span style="color: rgb(255, 0, 0);">122</span>。</div><div>        如果要表示中文，显然一个字节是不够的，至少需要两个字节，而且还不能和ASCII编码冲突，所以，中国制定了<span style="color: rgb(255, 0, 0);">GB2312</span>编码，用来把中文编进去。</div><div>类似的，日文和韩文等其他语言也有这个问题。为了统一所有文字的编码，<span style="color: rgb(255, 0, 0);">Unicode</span>应运而生。Unicode把所有语言都统一到一套编码里，这样就不会再有乱码问题了。</div><div>        Python在后来添加了对Unicode的支持，以Unicode表示的字符串用u'...'表示，比如：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">print u'中文'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">中文</span></div></div><div>        如果中文字符串在Python环境下遇到 UnicodeDecodeError，这是因为.py文件保存的格式有问题。可以在第一行添加注释</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;"># -*- coding: utf-8 -*-</span></div></div><div>目的是告诉Python解释器，用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。</div><div><span style="font-weight: bold;">raw+多行：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">ur'''Python的Unicode字符串支持&quot;中文&quot;,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&quot;日文&quot;,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&quot;韩文&quot;等多种语言'''</span></div></div><div><br/></div><h2><font color="#1C3387" style="font-size: 18pt; font-weight: normal;">对字符串切片</font></h2><div><span style="-en-paragraph: true;">字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list，每个元素就是一个字符。因此，字符串也可以用切片操作，只是操作结果仍是字符串：</span></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; 'ABCDEFG'[:3]</div><div>'ABC'</div><div>&gt;&gt;&gt; 'ABCDEFG'[-3:]</div><div>'EFG'</div><div>&gt;&gt;&gt; 'ABCDEFG'[::2]</div><div>'ACEG'</div></div><div><span style="-en-paragraph: true;">在很多编程语言中，针对字符串提供了很多各种截取函数，其实目的就是对字符串切片。Python没有针对字符串的截取函数，只需要切片一个操作就可以完成，非常简单。</span></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><h2 style="text-align: center;"><span style="font-size: 24pt; color: rgb(28, 51, 135);">整数和浮点数</span></h2><div>        Python支持对整数和浮点数直接进行四则混合运算，运算规则和数学上的四则运算规则完全一致。</div><div>基本的运算：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">1 + 2 + 3   # ==&gt; 6</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">4 * 5 - 6   # ==&gt; 14</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">7.5 / 8 + 2.1   # ==&gt; 3.0375</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">使用括号可以提升优先级，这和数学运算完全一致，注意只能使用小括号，但是括号可以嵌套很多层：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">(1 + 2) * 3    # ==&gt; 9</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">(2.2 + 3.3) / (1.5 * (9 - 0.3))    # ==&gt; 0.42145593869731807</span></div></div><div><br/></div><div><font style="font-size: 12pt;"><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">和数学运算不同的地方是，Python的整数运算结果仍然是整数，浮点数运算结果仍然是浮点数：</span></font></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">1 + 2    # ==&gt; 整数 3</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">1.0 + 2.0    # ==&gt; 浮点数 3.0</span></div></div><div><br/></div><div>但是整数和浮点数混合运算的结果就变成浮点数了：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">1 + 2.0    # ==&gt; 浮点数 3.0</span></div></div><div><br/></div><div>        为什么要区分整数运算和浮点数运算呢？<font style="font-size: 12pt;"><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">这是因为整数运算的结果永远是精确的，而浮点数运算的结果不一定精确</span></font>，因为计算机内存再大，也无法精确表示出无限循环小数，比如 0.1 换成二进制表示就是无限循环小数。</div><div><br/></div><div>那整数的除法运算遇到除不尽的时候，结果难道不是浮点数吗？我们来试一下：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(173, 0, 0); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-weight: bold;">11 / 4    # ==&gt; 2</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">令很多初学者惊讶的是，Python的整数除法，即使除不尽，结果仍然是整数，余数直接被扔掉。不过，Python提供了一个求余的运算 % 可以计算余数：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">11 % 4    # ==&gt; 3</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">如果我们要计算 11 / 4 的精确结果，按照“整数和浮点数混合运算的结果是浮点数”的法则，把两个数中的一个变成浮点数再运算就没问题了：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(173, 0, 0); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-weight: bold;">11.0</span> <span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">/ 4    # ==&gt; 2.75</span></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div style="text-align: center;"><font style="font-size: 24pt;"><span style="font-size: 24pt; color: rgb(28, 51, 135); font-weight: bold;">布尔类型</span></font></div><div><br/></div><div>布尔类型只有True和False两种值，但是布尔类型有以下几种运算：</div><div><ul><li><span style="color: rgb(255, 0, 0); font-weight: bold;">与运算</span>：只有两个布尔值都为 True 时，计算结果才为 True。</li></ul><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">True and True # ==&gt; True</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">True and False # ==&gt; False</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">False and True # ==&gt; False</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">False and False # ==&gt; False</span></div></div></div><div><br/></div><div><ul><li><span style="color: rgb(255, 0, 0); font-weight: bold;">或运算</span>：只要有一个布尔值为 True，计算结果就是 True。</li></ul><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">True or True # ==&gt; True</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">True or False # ==&gt; True</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">False or True # ==&gt; True</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">False or False # ==&gt; False</span></div></div></div><div><br/></div><div><ul><li><span style="color: rgb(255, 0, 0); font-weight: bold;">非运算</span>：把True变为False，或者把False变为True：</li></ul><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">not True # ==&gt; False</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">not False # ==&gt; True</span></div></div></div><div><br/></div><div>        布尔运算在计算机中用来做条件判断，根据计算结果为True或者False，计算机可以自动执行不同的后续代码。</div><div><br/></div><div><span style="font-size: 18pt; color: rgb(255, 0, 0); font-weight: bold;">短路计算</span></div><div>1. 在计算 a and b 时，如果 a 是 False，则根据与运算法则，整个结果必定为 False，因此返回 a；如果 a 是 True，则整个计算结果必定取决与 b，因此返回 b。</div><div style="margin-top: 1em; margin-bottom: 1em;">2. 在计算 a or b 时，如果 a 是 True，则根据或运算法则，整个计算结果必定为 True，因此返回 a；如果 a 是 False，则整个计算结果必定取决于 b，因此返回 b。</div><div>所以Python解释器在做布尔运算时，只要能提前确定计算结果，它就不会往后算了，直接返回结果。</div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div style="text-align: center;"><font style="font-size: 24pt;"><span style="font-size: 24pt; color: rgb(28, 51, 135); font-weight: bold;">List</span></font></div><div>        Python内置的一种数据类型是列表：list。list是一种有序的集合，可以随时添加和删除其中的元素。</div><div>比如，列出班里所有同学的名字，就可以用一个list表示：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; ['Michael', 'Bob', 'Tracy']</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">['Michael', 'Bob', 'Tracy']</span></div></div><div>        list是数学意义上的有序集合，也就是说，list中的元素是按照顺序排列的。</div><div>构造list非常简单，按照上面的代码，直接用 [ ] 把list的所有元素都括起来，就是一个list对象。通常，我们会把list赋值给一个变量，这样，就可以通过变量来引用list：</div><div><br/></div><div>        由于Python是动态语言，所以list中包含的元素并不要求都必须是同一种数据类型，我们完全<font style="font-size: 14pt;"><span style="font-size: 14pt; color: rgb(173, 0, 0); font-weight: bold;">可以在list中包含各种数据</span></font>：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = ['Michael', 100, True]</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">一个元素也没有的list，就是空list：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; empty_list = []</span></div></div><div><br/></div><div><br/></div><h2><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">按照索引访问list</span></h2><div>由于list是一个有序集合，所以，我们可以用一个list按分数从高到低表示出班里的3个同学：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Bart']</span></div></div><div>要打印第四名同学的名字，用 L[3]:</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print L[3]</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Traceback (most recent call last):</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">IndexError: list index out of range</span></div></div><div>报错了！IndexError意思就是索引超出了范围，因为上面的list只有3个元素，有效的索引是 0，1，2。</div><div><br/></div><div><br/></div><div><span style="font-size: 18pt; color: rgb(28, 51, 135);">倒着数</span></div><div>Bart同学是最后一名，俗称倒数第一，所以，我们可以用 -1 这个索引来表示最后一个元素：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print L[-1]</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Bart</span></div></div><div><br/></div><div><br/></div><h2><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">添加新元素</span></h2><div>现在，班里有3名同学：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Bart']</span></div></div><div><div><br/></div><ul><li>append()</li></ul><div><br/></div></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; L.append('Paul')</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print L</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">['Adam', 'Lisa', 'Bart', 'Paul']</span></div></div><div><span style="font-weight: bold;">append()</span>总是把新的元素添加到 list 的尾部。</div><div><br/></div><div><ul><li>insert()</li></ul><div>        如果 Paul 同学表示自己总是考满分，要求添加到第一的位置，怎么办？</div><div>方法是用list的 insert()方法，它接受两个参数，第一个参数是索引号，第二个参数是待添加的新元素：</div></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Bart']</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; L.insert(0, 'Paul')</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print L</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">['Paul', 'Adam', 'Lisa', 'Bart']</span></div></div><div><br/></div><div><br/></div><h2><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">删除元素</span></h2><div><ul><li>pop()</li></ul></div><div>如果Paul同学排在最后一个，我们可以用list的pop()方法删除：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Bart', 'Paul']</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L.pop()</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Paul'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print L</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">['Adam', 'Lisa', 'Bart']</span></div></div><div><font color="#AD0000" style="font-size: 12pt;"><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">pop()方法总是删掉list的最后一个元素，并且它还返回这个元素，所以我们执行 L.pop() 后，会打印出 'Paul'。</span></font></div><div><br/></div><div>如果Paul同学不是排在最后一个怎么办？比如Paul同学排在第三：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Paul', 'Bart']</span></div></div><div><span style="line-height: 1.45;">要把Paul踢出list，我们就必须先定位Paul的位置。由于Paul的索引是2，因此，用</span> <span style="line-height: 1.45;">pop(2)</span><span style="line-height: 1.45;">把Paul删掉：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L.pop(2)</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Paul'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print L</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">['Adam', 'Lisa', 'Bart']</span></div></div><div><br/></div><div><font color="#1C3387" style="font-size: 18pt;">对list进行切片</font></div><div><span style="-en-paragraph: true;">Python提供了切片（Slice）操作符，能大大简化这种操作。</span></div><div style="-en-paragraph: true; margin-top: 1em; margin-bottom: 1em;"><span style="-en-paragraph: true;">对应上面的问题，取前3个元素，用一行代码就可以完成切片：</span></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; L[0:3]</div><div>['Adam', 'Lisa', 'Bart']</div></div><div><ul><li><span style="line-height: 1.45;">如果第一个索引是0，还可以省略：</span><br/></li></ul></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; L[:3]</div><div>['Adam', 'Lisa', 'Bart']</div></div><div><ul><li><span style="line-height: 1.45;">只用一个</span> <span style="line-height: 1.45; color: rgb(255, 0, 0); font-weight: bold;">:</span> <span style="line-height: 1.45;">，表示从头到尾：</span><br/></li></ul></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; L[:]</div><div>['Adam', 'Lisa', 'Bart', 'Paul']</div></div><div><ul><li><span style="line-height: 1.45;">切片操作还可以指定第三个参数：</span><br/></li></ul></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; L[::2]</div><div>['Adam', 'Bart']</div></div><div><span style="-en-paragraph: true;">第三个参数表示每N个取一个，上面的 L[::2] 会每两个元素取出一个来，也就是隔一个取一个。</span></div><div><ul><li><span style="line-height: 1.45;">同样支持倒数切片，试试：</span><br/></li></ul></div><div style="box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;-en-codeblock:true;"><div>&gt;&gt;&gt; L = ['Adam', 'Lisa', 'Bart', 'Paul']</div><div><br/></div><div>&gt;&gt;&gt; L[-2:]</div><div>['Bart', 'Paul']</div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><h2 style="text-align: center;"><span style="font-size: 24pt; color: rgb(28, 51, 135);">dict</span></h2><div>要根据名字找到对应的成绩，用两个 list 表示就不方便。</div><div style="margin-top: 1em; margin-bottom: 1em;">如果把名字和分数关联起来，组成类似的查找表：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Adam' ==&gt; 95</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Lisa' ==&gt; 85</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">'Bart' ==&gt; 59</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">给定一个名字，就可以直接查到分数。</div><div style="margin-top: 1em; margin-bottom: 1em;">Python的 dict 就是专门干这件事的。用 <span style="font-weight: bold;">dict </span>表示<span style="font-weight: bold;">“名字”-“成绩”</span>的查找表如下：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">d = {</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Adam': 95,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Lisa': 85,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Bart': 59</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">}</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">我们把<span style="font-weight: bold;">名字称为key</span>，对应的<span style="font-weight: bold;">成绩称为value</span>，dict就是通过 <span style="font-weight: bold;">key</span> 来查找 <span style="font-weight: bold;">value</span>。</div><div style="margin-top: 1em; margin-bottom: 1em;">花括号 <span style="color: rgb(255, 0, 0);">{}</span> 表示这是一个dict，然后按照 <span style="font-weight: bold;">key: value</span>, 写出来即可。最后一个 key: value 的逗号可以省略。</div><div>由于dict也是集合，<span style="color: rgb(255, 0, 0);">len() </span>函数可以计算任意集合的大小：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; len(d)</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">3</span></div></div><div><br/></div><div><span style="font-size: 18pt; color: rgb(28, 51, 135); line-height: 1.45;">访问dict</span></div><div style="margin-top: 1em; margin-bottom: 1em;">我们已经能创建一个dict，用于表示名字和成绩的对应关系：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">d = {</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Adam': 95,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Lisa': 85,</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    'Bart': 59</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">}</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">那么，如何根据名字来查找对应的成绩呢？</div><div style="margin-top: 1em; margin-bottom: 1em;">可以简单地使用 <span style="color: rgb(255, 0, 0);">d[key]</span> 的形式来查找对应的 value，这和 list 很像，不同之处是，<span style="font-weight: bold;">list 必须使用索引返回对应的元素，而dict使用key：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print d['Adam']</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">95</span></div></div><div><br/></div><div><span style="font-weight: bold;">注意:</span> 通过 key 访问 dict 的value，只要 key 存在，dict就返回对应的value。如果key不存在，会直接报错：KeyError。</div><div style="margin-top: 1em; margin-bottom: 1em;"><font style="font-size: 12pt;"><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">要避免 KeyError 发生，有两个办法：</span></font></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="font-weight: bold;">一是先判断一下 key 是否存在，用 in 操作符：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">if 'Paul' in d:</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">    print d['Paul'            </span></div></div><div><ul><li><br/></li><li><span style="font-weight: bold; line-height: 1.45;">get 方法</span></li></ul><div><br/></div></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco; font-weight: bold;">二是使用dict本身提供的一个 get 方法，在Key不存在的时候，返回None：</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print d.get('Bart')</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">59</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print d.get('Paul')</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">None</span></div></div><div><br/></div><h2><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">替换元素</span></h2><div><ul><li>更新班级成员名单，我们可以先把Bart删掉，再把Paul添加进来。</li><li>另一个办法是直接用Paul把Bart给替换掉：</li></ul><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; L[2] = 'Paul'</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print L</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">L = ['Adam', 'Lisa', 'Paul']</span></div></div></div><div><br/></div><div><span style="font-size: 18pt; color: rgb(28, 51, 135); line-height: 1.45;">dict的特点</span></div><div><ul><li><span style="font-weight: bold;">第一个特点是</span><span style="color: rgb(255, 0, 0); font-weight: bold;">查找速度快</span></li></ul><div><span style="color: rgb(255, 0, 0); font-weight: bold;">无论dict有10个元素还是10万个元素，查找速度都一样</span><span style="color: rgb(255, 0, 0); font-weight: bold;">。而list的查找速度随着元素增加而逐渐下降。</span></div><div><span style="color: rgb(255, 0, 0); font-weight: bold;">不过dict的查找速度快不是没有代价的，</span><span style="color: rgb(255, 0, 0); font-weight: bold;">dict的缺点是占用内存大，还会浪费很多内容</span><span style="color: rgb(255, 0, 0); font-weight: bold;">，list正好相反，占用内存小，但是查找速度慢。</span></div></div><div><ul><li>由于<span style="color: rgb(255, 0, 0);">dict</span>是按 key 查找，所以，在一个dict中，<span style="color: rgb(255, 0, 0);">key不能重复</span>。</li><li><span style="font-weight: bold;">dict的第二个特点就是存储的key-value序对是</span><span style="color: rgb(255, 0, 0); font-weight: bold;">没有顺序</span><span style="font-weight: bold;">的！</span>这和list不一样：</li></ul></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">d = {</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    'Adam': 95,</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    'Lisa': 85,</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    'Bart': 59</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">}</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">当我们试图打印这个dict时：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; print d</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">{'Lisa': 85, 'Adam': 95, 'Bart': 59}</span></div></div><div>打印的顺序不一定是我们创建时的顺序，而且，<span style="font-weight: bold; color: rgb(173, 0, 0); font-size: 12pt;">不同的机器打印的顺序都可能不同，这说明dict内部是</span><span style="font-weight: bold; color: rgb(173, 0, 0); font-size: 12pt;">无序</span><span style="font-weight: bold; color: rgb(173, 0, 0); font-size: 12pt;">的，不能用dict存储有序的集合。</span></div><div><br/></div><div><ul><li><span style="font-weight: bold;">作为 key 的元素必须</span><span style="color: rgb(255, 0, 0); font-weight: bold;">不可变</span>，Python的基本类型如字符串、整数、浮点数都是不可变的，都可以作为 key。<span style="text-decoration: underline;">但是list是可变的，就不能作为 key</span>。</li></ul></div><div><br/></div><div>不可变这个限制仅作用于key，value是否可变无所谓：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">{</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    '123': [1, 2, 3],  # key 是 str，value是list</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    123: '123',  # key 是 int，value 是 str</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">    ('a', 'b'): True  # key 是 tuple，并且tuple的每个元素都是不可变对象，value是 boolean</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">}</span></div><div><br/></div></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">更新dict</span></h2><div>可以随时往dict中添加新的 key-value。比如已有dict：</div><div>要把新同学'Paul'的成绩 72 加进去，用赋值语句：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; d['Paul'] = 72</span></div></div><div>再看看dict的内容：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; print d</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">如果 key 已经存在，则赋值会用新的 value 替换掉原来的 value：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; d['Bart'] = 60</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; print d</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}</span></div></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">遍历dict</span></h2><div>由于dict也是一个集合，所以，遍历dict和遍历list类似，都可以通过 for 循环实现。</div><div style="margin-top: 1em; margin-bottom: 1em;">直接使用for循环可以遍历 dict 的 key：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; for key in d:</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">...     print key</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">...</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Lisa</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Adam</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Bart</span></div><div><br/></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div style="text-align: center;"><font style="font-size: 24pt;"><span style="color: rgb(28, 51, 135); font-size: 24pt; font-weight: bold;">set</span></font></div><div><span style="font-weight: bold;">dict的作用是建立一组 key 和一组 value 的映射关系，dict的key是不能重复的。</span></div><div style="margin-top: 1em; margin-bottom: 1em;">有的时候，我们只想要 dict 的 key，不关心 key 对应的 value，目的就是保证这个集合的元素不会重复，这时，set就派上用场了。</div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="font-weight: bold;">set 持有一系列元素，这一点和 list 很像，但是set的元素没有重复，而且是无序的，这点和 dict 的 key很像。</span></div><div style="margin-top: 1em; margin-bottom: 1em;">创建 set 的方式是<font style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold; font-style: italic; text-decoration: underline;">调用 set() 并传入一个 list，list的元素将作为set的元素</span></font>：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; s = set(['A', 'B', 'C'])</span></div></div><div>可以查看 set 的内容：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; print s</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">set(['A', 'C', 'B'])</span></div></div><div><br/></div><div>打印的顺序和原始 list 的顺序有可能是不同的，因为set内部存储的元素是<span style="color: rgb(255, 0, 0); font-weight: bold; font-size: 12pt;">无序</span>的。</div><div style="margin-top: 1em; margin-bottom: 1em;">因为<font style="font-size: 12pt;"><span style="color: rgb(255, 0, 0); font-size: 12pt; font-weight: bold; text-decoration: underline;">set不能包含重复的元素</span></font>，所以，当我们传入包含重复元素的 list 会怎么样呢？</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; s = set(['A', 'B', 'C', 'C'])</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; print s</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">set(['A', 'C', 'B'])</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; len(s)</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">3</span></div><div><br/></div></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">访问set</span></h2><div><font style="font-size: 14pt;"><span style="color: rgb(227, 0, 0); font-size: 14pt; font-weight: bold;">访问 set中的某个元素实际上就是判断一个元素是否在set中。</span></font></div><div>我们可以用 in 操作符判断：</div><div style="margin-top: 1em; margin-bottom: 1em;">Bart是该班的同学吗？</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; 'Bart' in s</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">True</span></div></div><div style="margin-top: 1em; margin-bottom: 1em;">Bill是该班的同学吗？</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; 'Bill' in s</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">False</span></div></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">set的特点</span></h2><div><ul><li><span style="font-weight: bold; line-height: 1.45;">set的内部结构和dict很像，唯一区别是不存储value</span><span style="line-height: 1.45;">，因此，判断一个元素是否在set中速度很快。</span></li><li><span style="font-weight: bold; line-height: 1.45;">set存储的元素和dict的key类似，必须是不变对象</span><span style="line-height: 1.45;">，因此，任何可变对象是不能放入set中的。</span></li><li><span style="line-height: 1.45;">最后，</span><span style="color: rgb(255, 0, 0); line-height: 1.45;">set存储的元素也是没有顺序的。</span></li></ul></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">遍历set</span></h2><div>直接使用 for 循环可以遍历 set 的元素：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; s = set(['Adam', 'Lisa', 'Bart'])</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">&gt;&gt;&gt; for name in s:</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">...     print name</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">...</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Lisa</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Adam</span></div><div><span style="background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px;">Bart</span></div><div><br/></div></div><div><br/></div><h2><span style="color: rgb(28, 51, 135); font-size: 18pt; font-weight: normal;">更新set</span></h2><div>由于<span style="font-weight: bold;">set存储的是一组不重复的无序元素</span>，因此，更新set主要做两件事：</div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="font-weight: bold;">一是把新的元素添加到set中，二是把已有元素从set中删除。</span></div><div><ul><li><span style="line-height: 1.45;">添加元素时，用set的add()方法：</span></li></ul></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; s = set([1, 2, 3])</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; s.add(4)</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print s</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">set([1, 2, 3, 4])</span></div></div><div><ul><li>删除set中的元素时，用set的remove()方法：</li></ul></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; s = set([1, 2, 3, 4])</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; s.remove(4)</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">&gt;&gt;&gt; print s</span></div><div><span style="font-size: 9pt; background-color: rgb(251, 250, 248); color: rgb(51, 51, 51); font-family: Monaco;">set([1, 2, 3])</span></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><h2 style="text-align: center;"><span style="font-size: 24pt; color: rgb(28, 51, 135);">tuple</span></h2><div style="text-align: center;"><span style="text-align: left; line-height: 1.45;">    tuple是另一种有序的列表，中文翻译为“ 元组 ”。tuple 和 list 非常类似，但是，</span></div><div style="text-align: left;"><div>tuple一旦创建完毕，就不能修改了。</div></div><div style="text-align: left;">同样是表示班里同学的名称，用tuple表示如下：</div><div style="text-align: left;"><br/></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; t = ('Adam', 'Lisa', 'Bart')</span></div></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><div>创建tuple和创建list唯一不同之处是用( )替代了[ ]。</div></div><div style="text-align: left;">现在，这个 t 就不能改变了，tuple没有 append()方法，也没有insert()和pop()方法。所以，新同学没法直接往 tuple 中添加，老同学想退出 tuple 也不行。</div><div style="margin-top: 1em; margin-bottom: 1em; text-align: left;">获取 tuple 元素的方式和 list 是一模一样的，我们可以正常使用 t[0]，t[-1]等索引方式访问元素，但是不能赋值成别的元素，不信可以试试：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; t[0] = 'Paul'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">Traceback (most recent call last):</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">TypeError: 'tuple' object does not support item assignment</span></div></div><div style="text-align: left;"></div><h2 style="text-align: left;"><br/></h2><h2 style="text-align: left;"><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">单元素tuple</span></h2><div style="text-align: left;"><div>        因为()既可以表示tuple，又可以作为括号表示运算时的优先级，结果 (1) 被Python解释器计算出结果 1，导致我们得到的不是tuple，而是整数 1。</div></div><div style="text-align: left;">        正是因为用()定义单元素的tuple有歧义，所以 Python 规定，单元素 tuple 要多加一个逗号<span style="color: rgb(255, 0, 0);">“,”</span>，这样就避免了歧义：</div><div style="text-align: left;"><br/></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; t = (1,)</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print t</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">(1,)</span></div></div><div style="text-align: left;"><br/></div><div style="text-align: left;">多元素 tuple 加不加这个额外的“,”效果是一样的：</div><div style="text-align: left;"><br/></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; t = (1, 2, 3,)</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print t</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">(1, 2, 3)</span></div></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"></div><h2 style="text-align: left;"><span style="font-size: 18pt; color: rgb(28, 51, 135); font-weight: normal;">“可变”的tuple</span></h2><div style="text-align: left;">我们来看一个“可变”的tuple：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; t = ('a', 'b', ['A', 'B'])</span></div></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><span style="font-weight: bold;">注意</span>到 t 有 3 个元素：<span style="font-weight: bold;">'a'，'b'</span>和一个list：<span style="font-weight: bold;">['A', 'B']</span>。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L = t[2]</span></div></div><div style="text-align: left;"><div><br/></div></div><div style="text-align: left;"><span style="line-height: 1.45;">然后，我们把list的两个元素改一改：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L[0] = 'X'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; L[1] = 'Y'</span></div></div><div style="text-align: left;"><div><br/></div></div><div style="text-align: left;"><span style="line-height: 1.45;">再看看tuple的内容：</span></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">&gt;&gt;&gt; print t</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">('a', 'b', ['X', 'Y'])</span></div></div><div style="text-align: left;"><br/></div><div style="text-align: left;">tuple一开始指向的list并没有改成别的list，所以，<span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">tuple所谓的</span><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">“不变”</span><span style="font-size: 12pt; color: rgb(173, 0, 0); font-weight: bold;">是说，tuple的每个元素，指向永远不变。</span>即<span style="font-weight: bold;">指向'a'，就不能改成指向'b'</span>，指向一个list，就不能改成指向其他对象，但指向的这个list本身是可变的！</div><div style="text-align: left;"><div>理解了<span style="font-weight: bold;">“指向不变”</span>后，<span style="color: rgb(50, 135, 18); font-weight: bold;">要创建一个内容也不变的tuple怎么做？那就必须保证tuple的每一个元素本身也不能变</span>。</div></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div style="text-align: left;"><br/></div><div><span style="font-size: 18pt; color: rgb(28, 51, 135);">内存中的变量</span></div><div><br/></div><div>当我们写：<span style="white-space: pre-wrap; background-color: rgb(238, 238, 238); line-height: 20.7999992370605px;">a = 'ABC'</span><span style="line-height: 1.6em;">时，Python解释器干了两件事情：</span></div><div><ul><li>在内存中创建了一个'ABC'的字符串；</li><li>在内存中创建了一个名为a的变量，并把它指向'ABC'。</li></ul></div><div>也可以把一个变量a赋值给另一个变量b，这个操作实际上是把变量b指向变量a所指向的数据，例如下面的代码：</div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">a = 'ABC'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">b = a</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">a = 'XYZ'</span></div><div><span style="background-color: rgb(251, 250, 248); font-size: 12px; color: rgb(51, 51, 51); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;">print b</span></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div></div><div><br/></div></span>
</div></body></html> 